/*BMPLoader - loads Microsoft .bmp format
    Copyright (C) 2006  Chris Backhouse

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


  cjbackhouse@hotmail.com 		www.backhouse.tk
  
  I would appreciate it if anyone using this in something cool would tell me
  so I can see where it ends up.

  Takes a filename, returns an array of RGB pixel data
  Loads:
  24bit bitmaps
  256 colour bitmaps
  16 colour bitmaps
  2 colour bitmaps  (Thanks to Charles Rabier)

  This code is designed for use in openGL programs, so bitmaps not correctly padded will not
  load properly, I believe this only applies to: 
  256cols if width is not a multiple of 4
  16cols if width is not a multiple of 8
  2cols if width is not a multiple of 32

  Sample code:

	BMPClass bmp;
	BMPLoad(fname,bmp);
	glTexImage2D(GL_TEXTURE_2D,0,3,bmp.width,bmp.height,0,GL_RGB,GL_UNSIGNED_BYTE,bmp.bytes);
*/


/*
  This file is a very simple example of how to use my code.
  (If you don't have glut then just rewrite in your favourite OpenGL thingy)
  Please read BMPLoader.h for some documentation
*/

#include <iostream>

#include "BITMAP.h"

inline void copybuffer(RGBA*ptr1,RGBA*ptr2)
{
	*ptr1++ = *ptr2++;
	*ptr1++ = *ptr2++;
	*ptr1++ = *ptr2++;
	*ptr1++ = *ptr2++;
}

int main(int argc,char** argv)
{
	RGBA *buffer;
	RGBA *newbuffer;
	
	CBitmap bitmap;
	if(bitmap.Load("C:\\A.bmp"))
	{
		buffer = (RGBA*)bitmap.GetBits();
		
		unsigned int width = bitmap.GetWidth();
		unsigned int height = bitmap.GetHeight();
		newbuffer = new RGBA[2*width*height];
		RGBA *newbufferptr = newbuffer;
		RGBA *bufferptr = buffer;

		for(unsigned int i = 0 ; i < height ; ++i)
		{
			for(unsigned int k = i*width, j = i*width*2 ,p = width*(2*i +1) ; k < width*( i + 1) ; ++k,++j,++p)
			{
				//copybuffer(&newbufferptr[j],&bufferptr[k]);
				newbufferptr[j] = bufferptr[k];
				//copybuffer(&newbufferptr[p],&bufferptr[k]);
				newbufferptr[p] = bufferptr[k];
			}
		}
		
		newbuffer = newbufferptr;
		buffer = bufferptr;
		
		/*newbuffer = newbuffer + width;

		for(unsigned int i =0 ; i<height ; ++i)
		{
			memcpy(newbuffer,buffer,width);
			newbuffer = newbuffer + 2*width;
			buffer = buffer + width;
		}*/

		bitmap.SetBits(newbufferptr,2*width,height);
		bitmap.Save("C:\\AA.bmp");

	}

	return 0;
}

